package com.tapstitch.scm.common.core.repository.condition;

import java.util.ArrayList;
import java.util.Date;
import java.util.List;


/**
 * @author geney
 */
public abstract class BaseCriteria {

    private List<Criterion> criteria;

    protected BaseCriteria(String prefix){
        this();
    }

    protected BaseCriteria() {
        criteria = new ArrayList<>();
    }

    public boolean isValid() {
        return criteria.size() > 0;
    }

    public List<Criterion> getAllCriteria() {
        return criteria;
    }

    public List<Criterion> getCriteria() {
        return criteria;
    }

    protected void addCriterion(String condition) {
        if (condition == null) {
            // 引入该异常可能导致大量 非空判断而无法链式调用，因此现注释掉
            // throw new RuntimeException("Value for conditions cannot be null");
            return;
        }
        criteria.add(new Criterion(condition));
    }

    protected void addCriterion(String condition, Object value, String property) {
        if (value == null) {
            // 引入该异常可能导致大量 非空判断而无法链式调用，因此现注释掉
            // throw new RuntimeException("Value for " + property + " cannot be null");
            return;
        }
        criteria.add(new Criterion(condition, value));
    }

    protected void addCriterion(String condition, Object value1, Object value2, String property) {
        if (value1 == null || value2 == null) {
            // 引入该异常可能导致大量 非空判断而无法链式调用，因此现注释掉
            // throw new RuntimeException("Between values for " + property + " cannot be null");
            return;
        }
        criteria.add(new Criterion(condition, value1, value2));
    }

    protected void addCriterionForJDBCDate(String condition, Date value, String property) {
        if (value == null) {
            // 引入该异常可能导致大量 非空判断而无法链式调用，因此现注释掉
            // throw new RuntimeException("Value for " + property + " cannot be null");
            return;
        }
        addCriterion(condition, new java.sql.Date(value.getTime()), property);
    }

    protected void addCriterionForJDBCDate(String condition, List<Date> values, String property) {
        if (values == null || values.size() == 0) {
            // 引入该异常可能导致大量 非空判断而无法链式调用，因此现注释掉
            // throw new RuntimeException("Value list for " + property + " cannot be null or empty");
            return;
        }
        List<java.sql.Date> dateList = new ArrayList<java.sql.Date>();
        for (Date value : values) {
            dateList.add(new java.sql.Date(value.getTime()));
        }
        addCriterion(condition, dateList, property);
    }

    protected void addCriterionForJDBCDate(String condition, Date value1, Date value2, String property) {
        if (value1 == null || value2 == null) {
            // 引入该异常可能导致大量 非空判断而无法链式调用，因此现注释掉
            // throw new RuntimeException("Between values for " + property + " cannot be null");
            return;
        }
        addCriterion(condition, new java.sql.Date(value1.getTime()), new java.sql.Date(value2.getTime()), property);
    }
}
